package xushuo.dao.dao.userinfo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import xushuo.dao.dao.base.BaseImplDao;
import xushuo.dao.entity.weixin.user.UserLoginInfo;
import xushuo.dao.service.userinfo.ChooseAddressInfoService;
import xushuo.dao.service.userinfo.GetUserInfoService;

/**
 * Create by zhangpe0312@qq.com on 2018/2/6.
 * <p>
 * 如果是单个功能就在Dao层实现，如果一个方法体需要多种实现
 * 就在Service层实现
 */
@Repository
public abstract class UserLoginInfoDao extends BaseImplDao<UserLoginInfo> {

    @Autowired
    GetUserInfoService userInfoService;
    @Autowired
    ChooseAddressInfoService addressInfoService;

    public void saveUserLoginInfo(UserLoginInfo userLoginInfo) {

        if (userLoginInfo == null) {
            logger.error("userLoginInfo is null");
            throw new NullPointerException("userLoginInfo is null");
        }

        if (userLoginInfo.getAddressInfo() == null) {
            logger.error("AddressInfo is null");
            throw new NullPointerException("AddressInfo is null");
        }

        if (userLoginInfo.getUserInfo() == null) {
            logger.error("UserInfo is null");
            throw new NullPointerException("UserInfo is null");
        }

        //在都能够获取用户手机号码的时候使用

//        if (userLoginInfo.getPhoneNum() == null){
//            logger.error("PhoneNum is null");
//            throw new NullPointerException("PhoneNum is null");
//        }

        /**
         * 暂时未解决的问题
         *
         * 如果在之前已经添加进入了数据的数据，再绑定
         * 到这个userinfo对象上是不行的
         *
         * 待解决这个问题
         *
         * 目前只能够是数据库中没有的，然后依次将数据导入数据库
         * 过后再将主表导入数据库
         *
         * 解决方法：将已经存在的实例存取出并以持久态保存，然后进行
         * 数据绑定，便能添加成功
         *
         * 2018/2/7
         */

        try {
//            addressInfoService.save(userLoginInfo.getAddressInfo());
//            userInfoService.save(userLoginInfo.getUserInfo());
//          save(userLoginInfo.getPhoneNum());
            save(userLoginInfo);
            logger.info("添加成功 userLoginInfo " + userLoginInfo.toString());
        } catch (RuntimeException e) {
            logger.error("添加失败 userLoginInfo " + userLoginInfo.toString());
            logger.error("信息回滚" + e);
            throw new RuntimeException("信息添加失败 " + e);
        }
    }
}
